const express = require('express');
const router = express.Router();
const { Favorite, AIRole, User } = require('../models');
const { authenticateToken } = require('../middleware/auth');

// 添加收藏
router.post('/', authenticateToken, async (req, res) => {
  try {
    const { ai_role_id } = req.body;
    const user_id = req.user.id;
    
    // 检查AI角色是否存在
    const aiRole = await AIRole.findByPk(ai_role_id);
    if (!aiRole) {
      return res.status(404).json({ error: 'AI角色不存在' });
    }
    
    // 检查是否已经收藏
    const existingFavorite = await Favorite.findOne({
      where: { user_id, ai_role_id }
    });
    
    if (existingFavorite) {
      return res.status(400).json({ error: '已经收藏过该AI角色' });
    }
    
    // 创建收藏记录
    const newFavorite = await Favorite.create({
      user_id,
      ai_role_id
    });
    
    res.status(201).json({ message: '收藏成功' });
  } catch (error) {
    console.error('收藏失败:', error);
    res.status(500).json({ error: '收藏失败' });
  }
});

// 取消收藏
router.delete('/:ai_role_id', authenticateToken, async (req, res) => {
  try {
    const ai_role_id = req.params.ai_role_id;
    const user_id = req.user.id;
    
    const favorite = await Favorite.findOne({
      where: { user_id, ai_role_id }
    });
    
    if (!favorite) {
      return res.status(404).json({ error: '未找到收藏记录' });
    }
    
    await favorite.destroy();
    res.json({ message: '取消收藏成功' });
  } catch (error) {
    console.error('取消收藏失败:', error);
    res.status(500).json({ error: '取消收藏失败' });
  }
});

// 获取用户的所有收藏
router.get('/', authenticateToken, async (req, res) => {
  try {
    const user_id = req.user.id;
    
    const favorites = await Favorite.findAll({
      where: { user_id },
      include: [
        {
          model: AIRole,
          attributes: ['id', 'name', 'description', 'avatar', 'type']
        }
      ],
      order: [['created_at', 'DESC']]
    });
    
    res.json(favorites);
  } catch (error) {
    console.error('获取收藏列表失败:', error);
    res.status(500).json({ error: '获取收藏列表失败' });
  }
});

// 检查是否已收藏
router.get('/check/:ai_role_id', authenticateToken, async (req, res) => {
  try {
    const ai_role_id = req.params.ai_role_id;
    const user_id = req.user.id;
    
    const favorite = await Favorite.findOne({
      where: { user_id, ai_role_id }
    });
    
    res.json({ isFavorite: !!favorite });
  } catch (error) {
    console.error('检查收藏状态失败:', error);
    res.status(500).json({ error: '检查收藏状态失败' });
  }
});

module.exports = router; 